#pragma once

#include "HotKey.h"

namespace HotKeyCompare
  {

//------------------------------------------------------------------------

  template<class CompareByProperty>
  struct CompareBy
    {
    bool operator()(HotKey & ip_hot_key);
    bool operator()(HotKey * ip_hot_key);
    bool operator()(boost::shared_ptr<HotKey> & ip_hot_key);
    };

//------------------------------------------------------------------------

  struct CompareByID : CompareBy<CompareByID>
    {
    CompareByID(int i_id);
    bool IsEqual(HotKey & i_hot_key);
    int m_id;
    };

//------------------------------------------------------------------------

  struct CompareByName : CompareBy<CompareByName>
    {
    CompareByName(std::wstring & i_name);
    bool IsEqual(HotKey & i_hot_key);
    std::wstring m_name;
    };

//------------------------------------------------------------------------

  struct CompareByKeys : CompareBy<CompareByKeys>
    {
    CompareByKeys(HotKey::KeyCode i_vk_code, HotKey::Modifier i_modifiers);
    bool IsEqual(HotKey & i_hot_key);
    HotKey::KeyCode m_vk_code;
    HotKey::Modifier m_modifiers;
    };
//------------------------------------------------------------------------
  }